package com.xdqzy.baseline.common.exception;

import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;

import java.util.Collection;

/**
 * @author quss
 * @version 1.0.0
 * @ClassName CtbcAssert.java
 * @Description 异常断言
 * @createTime 2020年10月24日 22:56:00
 */
public class CtbcAssert {

    /**
     * 表达式断言，表达式非true抛出业务域异常
     *
     * @param expression 表达式
     * @param code       错误码
     */
    public static void isTrue(boolean expression, int code) {
        if (!expression) {
            throw new BusinessException(code);
        }
    }

    /**
     * 表达式断言，表达式非true抛出业务域异常
     *
     * @param expression   表达式
     * @param errorMessage 错误信息
     */
    public static void isTrue(boolean expression, String errorMessage) {
        if (!expression) {
            throw new BusinessException(1, errorMessage);
        }
    }
    /**
     * 表达式断言，表达式非true抛出业务域异常
     *
     * @param expression   表达式
     * @param code         错误码
     * @param errorMessage 错误信息
     */
    public static void isTrue(boolean expression, int code, String errorMessage) {
        if (!expression) {
            throw new BusinessException(code, errorMessage);
        }
    }

    /**
     * 对象判断空 断言，对象非空抛出业务域异常
     *
     * @param object 对象
     * @param code   错误码
     */
    public static void isNull(Object object, int code) {
        if (object != null) {
            throw new BusinessException(code);
        }
    }

    /**
     * 对象判断空 断言，对象非空抛出业务域异常
     *
     * @param object 对象
     * @param code   错误码
     */
    public static void isNull(Object object, int code, String errorMessage) {
        if (object != null) {
            throw new BusinessException(code, errorMessage);
        }
    }

    /**
     * 对象判断非空 断言，对象为空抛出业务域异常
     *
     * @param object 对象
     * @param code   错误码
     */
    public static void notNull(Object object, int code) {
        if (object == null) {
            throw new BusinessException(code);
        }
    }

    /**
     * 对象判断非空 断言，对象为空抛出业务域异常
     *
     * @param object 对象
     * @param code   错误码
     */
    public static void notNull(Object object, int code, String errorMessage) {
        if (object == null) {
            throw new BusinessException(code, errorMessage);
        }
    }

    /**
     * 集合判断非空 断言，集合为空抛出业务域异常
     *
     * @param collection 集合对象
     * @param code       错误码
     */
    public static void notEmpty(Collection<?> collection, int code) {
        if (CollectionUtils.isEmpty(collection)) {
            throw new BusinessException(code);
        }
    }

    /**
     * 集合判断非空 断言，集合为空抛出业务域异常
     *
     * @param collection   集合对象
     * @param code         错误码
     * @param errorMessage 错误信息
     */
    public static void notEmpty(Collection<?> collection, int code, String errorMessage) {
        if (CollectionUtils.isEmpty(collection)) {
            throw new BusinessException(code, errorMessage);
        }
    }

    /**
     * 字符串判断非空白 断言，字符串为空抛出业务域异常
     *
     * @param object 字符串对象
     * @param code   错误码
     */
    public static void notBlank(String object, int code) {
        if (StringUtils.isBlank(object)) {
            throw new BusinessException(code);
        }
    }

    /**
     * 字符串判断非空白 断言，字符串为空抛出业务域异常
     *
     * @param object       字符串对象
     * @param code         错误码
     * @param errorMessage 错误信息
     */
    public static void notBlank(String object, int code, String errorMessage) {
        if (StringUtils.isBlank(object)) {
            throw new BusinessException(code, errorMessage);
        }
    }

    /**
     * 字符串判断空白 断言，字符串为非空抛出业务域异常
     *
     * @param object       字符串对象
     * @param code         错误码
     * @param errorMessage 错误信息
     */
    public static void isBlank(String object, int code, String errorMessage) {
        if (StringUtils.isNotBlank(object)) {
            throw new BusinessException(code, errorMessage);
        }
    }

    /**
     * 字符串判断空白 断言，字符串为非空抛出业务域异常
     *
     * @param object       字符串对象
     * @param code         错误码
     * @param data         异常数据
     * @param errorMessage 错误信息
     */
    public static void isBlank(String object, int code, String errorMessage, Object data) {
        if (StringUtils.isNotBlank(object)) {
            throw new BusinessException(data, code, errorMessage);
        }
    }


    /**
     * 存在数据。空抛出业务域异常
     *
     * @param count  int类型
     * @param code   错误码
     */
    public static void existed(int count, int code) {
        if (count >0 ) {
            throw new BusinessException(code);
        }
    }

    /**
     * 存在数据。空抛出业务域异常
     *
     * @param count       统计
     * @param code         错误码
     * @param errorMessage 错误信息
     */
    public static void existed(int count,int code, String errorMessage) {
        if (count > 0 ) {
            throw new BusinessException(code, errorMessage);
        }
    }
    /**
     * 私有构造
     */
    private CtbcAssert() {
    }
}
